﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ForrajeriaDB; //ESTE USING VA EN TODOS LOS ELEMENTOS DE ESTA CAPA
using System.Data;
using System.Data.SqlClient;
namespace ForrajeriaDAL
{
    public class ProveedorXForrajeDAL : AccesoDAL, InterfazDAL<ProveedorXForrajeMO>
    {
        private SqlCommand cmd;
        #region Interfaz
        public List<ProveedorXForrajeMO> GetAll()
        {
            throw new NotImplementedException();
        }

        public void Adicionar(ProveedorXForrajeMO item)
        {
            try
            {
                cmd = new SqlCommand("ProveedorXForraje_INSERT", getConexion());
                cmd.CommandType = CommandType.StoredProcedure;



               
                cmd.Parameters.Add(new SqlParameter("@forraje", item.CodigoForraje));
                cmd.Parameters.Add(new SqlParameter("@proveedor", item.CodigoProveedor));
                cmd.Parameters.Add(new SqlParameter("@precio", item.PrecioDeCompra));



                opencon(); //abro conexion
                cmd.ExecuteNonQuery();
                closecon(); //cierra conexion

            }
            catch (SqlException ex)
            {
                closecon();
                throw ex;
            }
        }

        public void Eliminar(ProveedorXForrajeMO item)
        {
            try
            {
                cmd = new SqlCommand("ProveedorXForraje_DELETE", getConexion());
                cmd.CommandType = CommandType.StoredProcedure;

                cmd.Parameters.Add(new SqlParameter("@forraje", item.CodigoForraje));
                cmd.Parameters.Add(new SqlParameter("@proveedor", item.CodigoProveedor));
               



                opencon(); //abro conexion
                cmd.ExecuteNonQuery();
                closecon(); //cierra conexion

            }
            catch (SqlException ex)
            {
                closecon();
                throw ex;
            }
        }

        public void Actualizar(ProveedorXForrajeMO nuevoItem, ProveedorXForrajeMO origItem)
        {
            try
            {
                cmd = new SqlCommand("ProveedorXForraje_UPDATE", getConexion());
                cmd.CommandType = CommandType.StoredProcedure;




                cmd.Parameters.Add(new SqlParameter("@forraje", origItem.CodigoForraje));
                cmd.Parameters.Add(new SqlParameter("@proveedor", origItem.CodigoProveedor));
                cmd.Parameters.Add(new SqlParameter("@precio", nuevoItem.PrecioDeCompra));



                opencon(); //abro conexion
                cmd.ExecuteNonQuery();
                closecon(); //cierra conexion

            }
            catch (SqlException ex)
            {
                closecon();
                throw ex;
            }
        }


        #endregion

        #region Constructores
        public ProveedorXForrajeDAL()
            : base()
        {

        }

        #endregion




        public List<ProveedorXForrajeMO> buscarByProveedor(int p)
        {
            SqlDataReader reader = null;
            List<ProveedorXForrajeMO> lista = new List<ProveedorXForrajeMO>();
            try
            {
                cmd = new SqlCommand("ProveedorXForraje_Buscar", getConexion());

                cmd.CommandType = CommandType.StoredProcedure;
                
                cmd.Parameters.Add(new SqlParameter("@proveedor", p));
                
                opencon();
                reader = cmd.ExecuteReader();
                while (reader.Read())
                {
                    ProveedorXForrajeMO aux = new ProveedorXForrajeMO();
                    //****************************Formar objeto aux**********************
                    aux.CodigoForraje = (int)reader["forraje"];
                    aux.CodigoProveedor = (int)reader["proveedor"];
                    if (reader["precio"].ToString() != "")
                        aux.PrecioDeCompra = double.Parse(reader["precio"].ToString());

                    //************************Fin Formar objeto aux*********************
                    lista.Add(aux);
                    aux = null;

                }
                return lista;

            }
            catch (Exception ex)
            {
                throw ex;
            }

            finally
            {
                closeReader(reader);
                closecon();
            }

        }
    }
}
